/**
 * 文件名：UserController.java
 * 功能：用户信息控制器，提供受保护的用户接口
 * 作用：处理需要认证的用户相关请求，如获取当前用户信息
 * 模块关系：
 *   - 依赖 UserMapper：查询用户数据
 *   - 依赖 UserEntity：数据库实体类
 *   - 依赖 UserVO：视图对象，隐藏敏感信息（如密码哈希）
 *   - 受保护接口：在 SecurityConfig 中配置为需要认证
 *   - 与 JwtAuthenticationFilter 协同：从 Authentication 中获取用户 ID
 * 作者：白永康
 * 学号：2501210209
 */
package com.example.demo.user;

import com.example.demo.common.ApiResponse;
import com.example.demo.user.entity.UserEntity;
import com.example.demo.user.mapper.UserMapper;
import com.example.demo.user.vo.UserVO;
import org.springframework.security.core.Authentication;
import org.springframework.web.bind.annotation.*;

/**
 * 用户信息控制器
 * 处理用户相关的受保护接口
 */
@RestController
@RequestMapping("/user")
public class UserController {

    private final UserMapper userMapper;

    /**
     * 构造函数，注入 UserMapper 依赖
     * @param userMapper 用户数据访问层
     */
    public UserController(UserMapper userMapper) {
        this.userMapper = userMapper;
    }

    /**
     * 获取当前用户信息（受保护接口）
     * 路径：GET /user/profile
     * 需要在请求头中携带 Authorization: Bearer <token>
     * @param authentication Spring Security 认证对象，由 JwtAuthenticationFilter 设置
     * @return 统一响应，包含用户信息（不包含密码）
     */
    @GetMapping("/profile")
    public ApiResponse<UserVO> getProfile(Authentication authentication) {
        // 从 Authentication 中获取用户 ID
        Long userId = (Long) authentication.getPrincipal();
        
        UserEntity user = userMapper.findById(userId);
        
        UserVO vo = UserVO.builder()
                .id(user.getId())
                .username(user.getUsername())
                .createdAt(user.getCreatedAt())
                .updatedAt(user.getUpdatedAt())
                .build();
        
        return ApiResponse.ok(vo);
    }
}
